package com.alks.function.mapper.stockdept.pcfactorystockquery;

import com.alks.entity.data.entity.PcSupplementDetail;
import com.alks.entity.data.entity.PcSupplementDutyTtl;
import com.alks.entity.data.entity.PcSupplementMtl;
import com.alks.function.data.request.stockdept.pcfactorystockwork.SpDetailCopyReqiest;
import com.alks.function.data.request.stockdept.pcfactorystockwork.SpDetailUpRequest;
import com.alks.function.data.vo.finance.mtlcosts.LaborCostVo;
import com.alks.function.data.vo.simple.DutyPriceVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.mapstruct.Mapper;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author ms
 * @since 2023-09-26
 */
@Mapper
public interface SD_SQ_PcSupplementDetailMapper extends BaseMapper<PcSupplementDetail> {


    /*获取补料部位的序号*/
    List<String> getSpPartAppSeq(@Param("lotNo") String lotNo, @Param("slipNo") String slipNo);

    /*获取补料计算需要的数据*/
    List<PcSupplementMtl> getSpMtlAddQuery(String slipNo);

    /*补量复制*/
    void spDetailCopyUpdate(SpDetailCopyReqiest request);

    /*整单删除*/
    void spAllDelete(String slipNo);

    /*更新明细数据*/
    void spDetailUpdate(List<SpDetailUpRequest> request);

    void spPartAdd(List<PcSupplementDetail> details);

    void getSpDetailDelete(@Param("slipNo") String slipNo, @Param("lotNo") String lotNo, @Param("seqNo") String seqNo);

    //MS TODO 2024/6/21 :  费用查询数据不全
    /**
     * 计算人工费用
     * @param slipNo 单据号
     * @param companyId 公司ID
     * @return 人工费用明细
     */
    List<LaborCostVo> laborCostQuery(@Param("slipNo") String slipNo, @Param("companyId") String companyId);

    /**
     * 打印所需 部位：材料 规格 单位 名称 组装数据
     */
    List<String> spPrintQuery(@Param("slipNo") String slipNo, @Param("companyId") String companyId);

    /**
     * 获取冲裁部分人工费用
     */
    List<DutyPriceVo> getCutPrice(@Param("ttlList") List<PcSupplementDutyTtl> ttlList, @Param("companyId") String companyId);

    /**
     * 获取手工部分人工费用
     */
    List<DutyPriceVo> getCut2Price(@Param("details") List<PcSupplementDetail> details, @Param("companyId") String companyId);

    /**
     * 获取外协部分人工费用
     */
    List<DutyPriceVo> getCut3Price(@Param("details") List<PcSupplementDetail> details, @Param("companyId") String companyId);

    /**
     * 获取针车部分人工费用
     */
    List<BigDecimal> getSwitchPrice(List<PcSupplementDetail> details, @Param("companyId") String companyId);

    /**
     * 获取各部位材料占比
     */
    List<PcSupplementDetail> getSpMtlPercent(@Param("dutyList") List<PcSupplementDutyTtl> dutyList, @Param("companyId") String companyId);

    /**
     * 获取补单指令与总量
     */
    List<PcSupplementDetail> getSpLotTotal(@Param("slipNo") String slipNo, @Param("companyId") String companyId);

    /**
     * 获取存在外发订单的指令
     */
    String checkOut(@Param("slipNo") String slipNo, @Param("companyId") String companyId);

    /**
     * 检查是否有手工费用
     */
    String checkCut2(@Param("slipNo") String slipNo, @Param("companyId") String companyId);

    /**
     * 检查是否有冲裁费用
     */
    String checkCut(@Param("slipNo") String slipNo, @Param("companyId") String companyId);

    /**
     * 补单审核打印补单部位数据
     */
    List<String> cfmPrintPartQuery(@Param("slipNo") String slipNo, @Param("lotNo") String lotNo, @Param("companyId") String companyId);
}
